/**
 * @Author: Jiang Zhongxun
 * @Date: 2024-10-07 19:20:16
 * @FilePath: /Socket/practiceProject/src/client/userOpt.c
 * @Description: 普通用户前台操作
 * @Copyright (c) 2024 by 蒋仲勋, All Rights Reserved.
 */
#include "../../include/client/userOpt.h"
#include "../../include/client/client.h"
#include "../../include/client/menu.h"
#include "../../include/db/dbDefinition.h"
#include "../../include/db/dbOperation.h"
#include "../../include/server/userSys.h"
#include "../../include/utils/utils.h"

extern int is_login; // 0 表示未登录，1 表示已登录
extern sqlite3 *db;  // 定义在守护进程 daemon.c

/**
 * @description: 普通用户客户端通信
 * @param {int} sockfd 套接字
 * @return {*} 成功返回0，失败返回-1
 */
int userTcpClientCom(int sockfd, char *userName)
{
// 初始化数据库与数据库表
// 下面一行代码，仅在单独测试时开放，因为已经在创建守护进程的函数中做了调用
#if 1
    db = databaseInit();
#endif

    if (sockfd < 0)
    {
        printf("sockfd is error!\n");
        return -1;
    }
    char buf_user[64] = {0};
    char userFlag[] = "user";  // 业务种类
    char userOption[20] = {0}; // 业务名称
    // char msgFromServer_user[128] = {0}; // 接收服务端消息
    // int recvSize_user;
    // 将处理的业务名称发送给服务器【check \ search \ update \ delete \ quit】
    printf("请输入业务名称[check \\ search \\ update \\ delete \\ quit]: ");
    scanf("%s", userOption);
    sprintf(buf_user, "%s@%s@%s", userFlag, userOption, userName);
    // 将业务种类和业务名称，发给服务器处理请求
    send(sockfd, buf_user, sizeof(buf_user), 0);
    printf("userOpt发送业务名称给服务端, 成功!\n");
    if (0 == strncasecmp(userOption, "quit", 4))
    {
        printf("退出用户平台成功!\n");
        is_login = 0;
        return -1;
    }
    // 判断管理员客户端的业务种类
    // 发起查验申请业务
    if (0 == strncasecmp(userOption, "check", 5))
    {
        // 调用发起查验申请接口
        applyNewCheck(db, userName);
    }
    // 查验申请记录业务
    else if (0 == strncasecmp(userOption, "search", 6))
    {
        // 调用查验申请记录接口
        searchCheckItem(db, userName);
    }
    // 修改驳回申请业务
    else if (0 == strncasecmp(userOption, "update", 6))
    {
        // 调用修改驳回申请接口
        updateCheckItem(db, userName);
    }
    // 删除办结记录业务
    else if (0 == strncasecmp(userOption, "delete", 6))
    {
        // 调用删除办结记录接口
        deleteCheckItem(db, userName);
    }
    return 0;
}
